#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "cargarImagenes.h"
#include <math.h>
#include "Foto.h"
#include "resizeImagenes.h"
#include "algoritmos.h"
#include "Matriz.h"

using namespace std;

///clear;g++ mainmaxi.cpp resizeImagenes.cpp Foto.cpp algoritmos.cpp cargarImagenes.cpp Matriz.cpp -o main && ./main ./imagenes/64x64/blond.pgm 1 1

int main(int argc, char* argv[])
{
    char *fileName;
    int lambda;
    int fr;
    vector<float> x;
    pair<Matriz, vector<float> > tuplaCargada;
    if (argc != 4)
    {
        cout << "Cantidad de parametros erronea" << endl;
        cout << "./main imagenes/128x128/blond.pgm lambda factor_reduccion" << endl;
    }
    else
    {
        fileName = argv[1];
        lambda = atoi(argv[2]);
        fr = atoi(argv[3]);

        FILE * pFile;
        pFile = fopen(fileName, "r");

        if (pFile == NULL)
            perror ("Error opening file");
        else
        {
            cout << "Abrimos el archivo: " << fileName << endl;
            cout << "Lambda: " << lambda << endl;
            cout << "Factor reduccion: " << fr << endl;

            char fileName[] = "./ImagenFiltrada.pgm";
            FILE * imagenNueva;
            imagenNueva = fopen(fileName, "w+");

            tuplaCargada = crearAyB(pFile,lambda,imagenNueva);

            cout << "Empezo Gauss" << endl;
            x = gauss(tuplaCargada.first, tuplaCargada.second);

            cout << "Termino Gauss" << endl<<endl;


//            for (int i=0; i<x.size(); i++)  ///Meto los pixeles en el archivo
//            {
//                cout<<x[i]<<endl;
//                fputc(x[i], imagenNueva);
//            }


//            FILE* original = fopen("./imagenes/256x256/lena (copy).pgm", "r");
//            FILE* ruido = fopen("./imagenes/256x256/ruido (copy).pgm", "r");

            Foto filtrada; Foto chota;

            filtrada.guardarImagen(original);

            chota.guardarImagen(ruido);




            fclose(original);fclose(ruido);
            fclose(pFile);
        }
    }
    return 0;
}
